import { utils } from "@/utils";

/**
 * 中间件函数：错误恢复
 *
 * 该函数旨在处理请求处理链中可能发生的错误。它通过捕获异常来确保应用程序的健壮性，
 * 并且将错误信息记录到日志中，同时将错误信息传递给上下文，以便进一步处理或返回给客户端。
 *
 * @param c Context - 上下文对象，用于存储和传递请求相关的数据
 * @param next Next - 前置中间件函数，用于继续执行请求处理链中的下一个中间件或处理器
 */
export async function recover(c: Context, next: Next) {
  try {
    // 将请求体赋值给上下文的params属性，方便后续处理使用
    c.params = c.request.body;
    // 继续执行请求处理链中的下一个中间件或处理器
    await next();
  } catch (e) {
    // 使用utils.Logger记录捕获的异常信息
    utils.Logger.error(String(e));
    console.error(e);
    // 将异常信息添加到上下文中，以便后续处理或返回给客户端
    c.error(String(e));
  }
}
